package cn.mayday.algorithms.year2021.month1.E栈专题;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 【简单】
 * 请你仅使用两个队列实现一个后入先出（LIFO）的栈，并支持普通队列的全部四种操作（push、top、pop 和 empty）。
 * <p>
 * 实现 MyStack 类：
 * <p>
 * void push(int x) 将元素 x 压入栈顶。
 * int pop() 移除并返回栈顶元素。
 * int top() 返回栈顶元素。
 * boolean empty() 如果栈是空的，返回 true ；否则，返回 false
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/implement-stack-using-queues
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author Mayday05
 * @date 2021/5/14 14:22
 */
public class Leetcode225QueueToStack {

    public static void main(String[] args) {

    }

    Queue<Integer> queue;


    /**
     * Initialize your data structure here.
     */
    public Leetcode225QueueToStack() {
        queue = new LinkedList<Integer>();
    }

    /**
     * Push element x onto stack.
     */
    public void push(int x) {
        // 关键在Push,如果队列不为空，倒换一下，时间复杂度还是N
        queue.offer(x);

        for (int i = 0; i < queue.size(); i++) {
            queue.offer(queue.poll());
        } // 倒换也可以简单成这样，一个入一个出

    }

    /**
     * Removes the element on top of the stack and returns that element.
     */
    public int pop() {
        return queue.poll();
    }

    /**
     * Get the top element.
     */
    public int top() {
        return queue.peek();
    }

    /**
     * Returns whether the stack is empty.
     */
    public boolean empty() {
        return queue.isEmpty();
    }
}
